/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package webservice;

import Model.EstadoFacadeRemote;
import Model.Estadoproductofecha;
import Model.EstadoproductofechaFacadeRemote;
import Model.EstadoproductofechaPK;
import Model.Novedad;
import Model.NovedadFacadeRemote;
import Model.Orden;
import Model.OrdenFacadeRemote;
import Model.Producto;
import Model.ProductoFacadeRemote;
import Model.RazonFacadeRemote;
import Model.TipoordenFacadeRemote;
import Model.Usuario;
import Model.UsuarioFacadeRemote;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.ejb.EJB;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**
 *
 * @author Diego
 */
@WebService(serviceName = "sadif_ws")
public class sadif_ws {
    @EJB
    private EstadoFacadeRemote estado_rem;
    @EJB
    private UsuarioFacadeRemote usuario_rem;
    @EJB
    private OrdenFacadeRemote orden_rem;
    @EJB
    private RazonFacadeRemote razon_rem;
    @EJB
    private NovedadFacadeRemote novedad_rem;
    @EJB
    private EstadoproductofechaFacadeRemote estact_rem;
    @EJB
    private ProductoFacadeRemote producto_rem;
    @EJB
    private TipoordenFacadeRemote tipoorden_rem;

    /**
     * Web service operation
     */
    @WebMethod(operationName = "login")
    public String login(@WebParam(name = "usuario") String usuario, @WebParam(name = "contrasena") String contrasena) {
        for (int i = 0; i < usuario_rem.findAll().size(); i++) {
            Usuario temp = new Usuario();
            temp.setIdUsuario(usuario_rem.findAll().get(i).getIdUsuario());
            temp.setNombre(usuario_rem.findAll().get(i).getNombre());
            temp.setPassword(usuario_rem.findAll().get(i).getPassword());
            temp.setRol(usuario_rem.findAll().get(i).getRol());

            if (temp.getNombre().equals(usuario)) {
                if (temp.getPassword().equals(contrasena)) {
                    return temp.getRol() + " " + temp.getIdUsuario();
                }
            }
        }
        return "NoExiste";
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getRazones")
    public String getRazones() {
        String res = "";
        for (int i = 0; i < razon_rem.findAll().size(); i++) {
            res = res + razon_rem.findAll().get(i).getDescripcion() + ";";
        }
        return res;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getEstadosProducto")
    public String getEstadosProducto() {
        String res = "";
        for (int i = 0; i < estado_rem.findAll().size(); i++) {
            res = res + estado_rem.findAll().get(i).getDescripcion() + ";";
        }
        return res;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "setEstadoProducto")
    public String setEstadoProducto(@WebParam(name = "idOrden")
    String idOrden, @WebParam(name = "EAN")
    String EAN, @WebParam(name = "idEstado")
    String idEstado, @WebParam(name = "latitud")
    String latitud, @WebParam(name = "longitud")
    String longitud) {
        try{
            Estadoproductofecha act = new Estadoproductofecha();
            act.setEstadoidEstado(Integer.parseInt(idEstado));
            String eanTmp = EAN.toString();
            act.setEstadoproductofechaPK(new EstadoproductofechaPK());
            act.getEstadoproductofechaPK().setEan(eanTmp);
            act.getEstadoproductofechaPK().setIdOrden(Integer.parseInt(idOrden));
            act.getEstadoproductofechaPK().setFechaEstado(new Date(GregorianCalendar.getInstance().get(GregorianCalendar.YEAR) - 1900, GregorianCalendar.getInstance().get(GregorianCalendar.MONTH), GregorianCalendar.getInstance().get(GregorianCalendar.DAY_OF_MONTH), GregorianCalendar.getInstance().get(GregorianCalendar.HOUR_OF_DAY), GregorianCalendar.getInstance().get(GregorianCalendar.MINUTE), GregorianCalendar.getInstance().get(GregorianCalendar.SECOND)));
            estact_rem.create(act);
            for (int i = 0; i<producto_rem.findAll().size(); i++){
                if (producto_rem.findAll().get(i).getEan().equals(eanTmp)){
                   Producto temp = producto_rem.findAll().get(i);
                   temp.setLatitud(Double.parseDouble(latitud));
                   temp.setLongitud(Double.parseDouble(longitud));
                   producto_rem.edit(temp);
                }
            }
            
            return "EstadoActualizado";
        }catch (Exception e){
            return "ErrorEstado";
        }
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getOrdenesbyidUsuario")
    public String getOrdenesbyidUsuario(@WebParam(name = "idUsuario")
    String idUsuario) {
        String res = "";
        for (int i = 0; i < orden_rem.findAll().size(); i++) {

            
            Orden temp = new Orden();
            temp.setIdUsuario(orden_rem.findAll().get(i).getIdUsuario());
            if (temp.getIdUsuario() == Integer.parseInt(idUsuario)){
            temp.setFechaHora(orden_rem.findAll().get(i).getFechaHora());
            temp.setIdOrden(orden_rem.findAll().get(i).getIdOrden());
            temp.setNumeroFactura(orden_rem.findAll().get(i).getNumeroFactura());
            temp.setProductoID(orden_rem.findAll().get(i).getProductoID());
            temp.setTipo(orden_rem.findAll().get(i).getTipo());
            temp.setIdUsuario(orden_rem.findAll().get(i).getIdUsuario());

            String tmp = temp.getIdOrden().toString();
            String tipo= temp.getTipo().toString();
            String tipo_desc = "";
            for (int j = 0; j<tipoorden_rem.findAll().size(); j++){
                if (tipoorden_rem.findAll().get(j).getIdTipoOrden().equals(Integer.parseInt(tipo))){
                    tipo_desc = tipoorden_rem.findAll().get(j).getDescripcion();
                }
            }
                        res = res + tmp +";" + tipo_desc + "-";

            }
        }
        return res;
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "getOrden")
    public String getOrden(@WebParam(name = "id_orden")
    final String id_orden, @WebParam(name = "id_usuario")
    String id_usuario) {
        for (int i = 0; i < orden_rem.findAll().size(); i++) {

            Orden temp = new Orden();
            temp.setEstado(orden_rem.findAll().get(i).getEstado());
            temp.setFechaHora(orden_rem.findAll().get(i).getFechaHora());
            temp.setIdOrden(orden_rem.findAll().get(i).getIdOrden());
            temp.setNumeroFactura(orden_rem.findAll().get(i).getNumeroFactura());
            temp.setProductoID(orden_rem.findAll().get(i).getProductoID());
            temp.setTipo(orden_rem.findAll().get(i).getTipo());
            temp.setIdUsuario(orden_rem.findAll().get(i).getIdUsuario());

            String tmp = temp.getIdOrden().toString();
            String usu = "" + temp.getIdUsuario();
                if (tmp.equals(id_orden)) {
                    if (usu.equals(id_usuario)) {
                        String estado;
                        if (temp.getEstado()) {
                            estado = "1";
                        } else {
                            estado = "0";
                        }

                        String res = temp.getProductoID() + ";" + temp.getNumeroFactura() + ";" + estado + ";";
                        return res;
                    }
                }
        }
        return "NoExiste";
    }

    /**
     * Web service operation
     */
    @WebMethod(operationName = "actualizarOrden")
    public String actualizarOrden(@WebParam(name = "id_orden")
    String id_orden, @WebParam(name = "id_usuario")
    String id_usuario, @WebParam(name = "estado")
    String estado, @WebParam(name = "razon")
    String razon, @WebParam(name = "descripcion")
    String descripcion) {
        try {
            int orden = Integer.parseInt(id_orden);
            
            boolean estado_b = false;
            for (int i = 0; i < orden_rem.findAll().size(); i++) {

                if (id_orden.equals(orden_rem.findAll().get(i).getIdOrden().toString())) {
                    if (id_usuario.equals(orden_rem.findAll().get(i).getIdUsuario() + "")) {
                            Orden temp = orden_rem.findAll().get(i);
                            if (estado.equals("1")) {
                                estado_b = true;
                            }
                            temp.setEstado(estado_b);

                            orden_rem.edit(temp);

                            if (!descripcion.isEmpty()){
                            int razon_cod = Integer.parseInt(razon);
                            Novedad nueva_novedad = new Novedad();
                            nueva_novedad.setDescripcion(descripcion);
                            nueva_novedad.setIdNovedad(novedad_rem.findAll().size() + 1);
                            nueva_novedad.setIdOrden(orden);
                            nueva_novedad.setRazon(razon_cod);
                            novedad_rem.create(nueva_novedad);
                            }
                            return "Actualizo";
                    }
                }
            }

            return "NoHayOrden";
        } catch (Exception e) {
            return "ExcepcionNoActualizo";
        }
    }

    

    
}
